题解:P16491 [GKS 2014 #D] GBus count

245 字
1 分钟
题解:P16491 [GKS 2014 #D] GBus count

题面传送门:P16491 [GKS 2014 #D] GBus count

题目大意#

给出 Gbus 的运营范围,求特定位置的 Gbus 覆盖数量。

思路讲解#

首先想到暴力的思路,每输入一条线路就给这条线路服务的所有城市答案 +1+1,时间复杂度约 10610^6,能过。

观察题面,每条线路覆盖的范围已给出,最好能快速求变化量。差分与前缀和的方法更优。

代码实现#

从差分到前缀和还原

根据差分的基本思路,只需在左端点和右端点之后一个位置对数组进行修改。

注意:本题的城市数量只与 ai,bi,cia_i,b_i,c_i 的范围有关,故下方求前缀和时循环到 50055005。

for(int i=1;i<=n;i++){
cin>>a[i]>>b[i];
s[a[i]]++;
s[b[i]+1]--;
}
for(int i=1;i<=5005;i++){
s[i]=s[i-1]+s[i];
}
完整代码
#include<bits/stdc++.h>
using namespace std;
int t,n,a[505],b[505],p,c,s[5005];
int main(){
cin>>t;
for(int z=1;z<=t;z++){
memset(s,0,sizeof(s));//多测不清空,_____
cout<<"Case #"<<z<<": ";
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i]>>b[i];
s[a[i]]++;
s[b[i]+1]--;
}
for(int i=1;i<=5005;i++){
s[i]=s[i-1]+s[i];
}
cin>>p;
for(int i=1;i<=p;i++){
cin>>c;
cout<<s[c]<<' ';
}
cout<<endl;
}
return 0;
}

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

题解:P16491 [GKS 2014 #D] GBus count
https://zhedaotixuanbo.pages.dev/posts/题解:P16491 [GKS 2014 D] GBus count/
作者
zhedaotixuanbo
发布于
2026-05-16
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
zhedaotixuanbo
这道题选什么? _____!
公告
分类
标签
站点统计
文章
17
分类
1
标签
21
总字数
6,295
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Cloudflare Pages
博客版本
ZTXB v1.0.0
文章许可
CC BY-NC-SA 4.0